package com.topvision.util.ftp;

import com.jcraft.jsch.*;
import com.topvision.constants.TopVisionWebConstants;
import org.apache.commons.lang.StringUtils;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import static com.topvision.util.ftp.FtpUtil.channel;


public class SFTPUpload {

    public SFTPChannel getSFTPChannel() {
        return new SFTPChannel();
    }

    /**
     * @throws Exception
     */
    public static void upload(InputStream in, String dist, String dir) throws Exception {
        SFTPUpload test = new SFTPUpload();

        Map<String, String> sftpDetails = new HashMap<String, String>();
        // 设置主机ip，端口，用户名，密码
        //122.112.226.39
        sftpDetails.put(SFTPConstants.SFTP_REQ_HOST, TopVisionWebConstants.SERVER_IP);
        sftpDetails.put(SFTPConstants.SFTP_REQ_USERNAME, TopVisionWebConstants.SERVER_USERNAME);
        //hwsmart@2017    Top123456
        sftpDetails.put(SFTPConstants.SFTP_REQ_PASSWORD, TopVisionWebConstants.SERVER_PASSWORD);
        sftpDetails.put(SFTPConstants.SFTP_REQ_PORT, TopVisionWebConstants.SERVER_PORT);


        SFTPChannel channel = test.getSFTPChannel();
        ChannelSftp chSftp = channel.getChannel(sftpDetails, 60000);


        try {
            chSftp.ls(dir); //首先查看下目录，如果不存在，系统会被错，捕获这个错，生成新的目录。
        } catch (Exception e) {
            //  chSftp.mkdir(dir);
            createDir(dir, chSftp);
        }
        chSftp.cd(dir);
        chSftp.put(in, dist, ChannelSftp.OVERWRITE); // 代码段3
        chSftp.quit();
        channel.closeChannel();
    }


    /**
     * 创建一个文件目录
     */
    public static void createDir(String createpath, ChannelSftp sftp) {
        try {
            if (isDirExist(createpath, sftp)) {
                sftp.cd(createpath);
            }
            String pathArry[] = createpath.split("/");
            StringBuffer filePath = new StringBuffer("/");
            for (String path : pathArry) {
                if (path.equals("")) {
                    continue;
                }
                filePath.append(path + "/");
                if (isDirExist(filePath.toString(), sftp)) {
                    sftp.cd(filePath.toString());
                } else {
                    // 建立目录
                    sftp.mkdir(filePath.toString());
                    // 进入并设置为当前目录
                    sftp.cd(filePath.toString());
                }
            }
            sftp.cd(createpath);
        } catch (SftpException e) {
            e.printStackTrace();
        }
    }


    /**
     * 判断目录是否存在
     */
    public static boolean isDirExist(String directory, ChannelSftp sftp) {
        boolean isDirExistFlag = false;
        try {
            SftpATTRS sftpATTRS = sftp.lstat(directory);
            isDirExistFlag = true;
            return sftpATTRS.isDir();
        } catch (Exception e) {
            if (e.getMessage().toLowerCase().equals("no such file")) {
                isDirExistFlag = false;
            }
        }
        return isDirExistFlag;
    }
}
